package br.com.ff.cliente.session;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.ejb.Local;
import javax.ejb.Stateless;

import br.com.ff.cliente.dao.ClienteDAO;
import br.com.ff.cliente.entidade.Cliente;
import br.com.ff.cliente.to.ClienteTO;
import br.com.ff.common.exception.EntidadeDuplicadaException;
import br.com.ff.commons.session.Repositorio;

@Stateless
@Local(ClienteLocal.class)
public class ClienteSessionBean implements ClienteLocal {

	@EJB
	Repositorio repositorio;
	
	ClienteDAO clienteDAO;
	
	@SuppressWarnings("unused")
	@PostConstruct
	private void inicializar() {
		clienteDAO = getRepositorio().getClienteDAO();
	}
	
	public ClienteTO findById(Long id) {		
		Cliente cliente = (Cliente)getClienteDAO().findById(Cliente.class, id);
		ClienteTO result = cliente.parseClienteTO();
		return result;
	}
	
	public List<ClienteTO> findByParams(ClienteTO clienteTO) {
		
		List<Cliente> clientes = getClienteDAO().findByParams(clienteTO);
		
		List<ClienteTO> result = new ArrayList<ClienteTO>();
		for (Cliente cliente : clientes) {
			result.add(cliente.parseClienteTO());
		}
		return result;
	}
	
	public void atualizar(ClienteTO clienteTo)
		throws EntidadeDuplicadaException {

		Cliente cliente = (Cliente)getClienteDAO().findById(Cliente.class, clienteTo.getId());
		
		cliente.setDescricao(clienteTo.getDescricao());
		cliente.setFisicoJuridico(clienteTo.getFisicoJuridico());
		cliente.setNome(clienteTo.getNome());
		cliente.setStatus(clienteTo.getStatus().getStatus());
		
		getClienteDAO().salvar(cliente);
		
		findById(clienteTo.getId());
		
	}
	
	public void remover(Long id) {
		Cliente cliente = (Cliente)getClienteDAO().findById(Cliente.class, id);
		getClienteDAO().remover(cliente);
	}
	
	public boolean salvar(ClienteTO clienteTO)
		throws EntidadeDuplicadaException {
		Cliente cliente = new Cliente(clienteTO);
		getClienteDAO().salvar(cliente);
		return true;
	}

	public Repositorio getRepositorio() {
		return repositorio;
	}

	public void setRepositorio(Repositorio repositorio) {
		this.repositorio = repositorio;
	}

	public ClienteDAO getClienteDAO() {
		return clienteDAO;
	}

	public void setClienteDAO(ClienteDAO clienteDAO) {
		this.clienteDAO = clienteDAO;
	}
	
}
